package com.example.demo.arithmetic.datastructure.linkedlist2;

/**
 * 给你单链表的头结点 head ，请你找出并返回链表的中间结点。
 * <p>
 * 如果有两个中间结点，则返回第二个中间结点。
 * <p>
 * 输入：head = [1,2,3,4,5]
 * 输出：[3,4,5]
 * 解释：链表只有一个中间结点，值为 3 。
 * <p>
 * <p>
 * 输入：head = [1,2,3,4,5,6]
 * 输出：[4,5,6]
 * 解释：该链表有两个中间结点，值分别为 3 和 4 ，返回第二个结点。
 */
public class Leetcode876 {
    public static void main(String[] args) {
        ListNode head1 = new ListNode(5, null);
        ListNode head2 = new ListNode(4, head1);
        ListNode head3 = new ListNode(3, head2);
        ListNode head4 = new ListNode(2, head3);
        ListNode head5 = new ListNode(1, head4);
        ListNode head = new Leetcode876().middleNode(head5);
//        while (head != null) {
//            System.out.println(head.val);
//            head = head.next;
//        }
        System.out.println(head.val);
    }


    public ListNode middleNode(ListNode head) {
        ListNode p1 = head;
        ListNode p2 = head;
        while (p2 != null && p2.next != null) {
            p1 = p1.next;
            p2 = p2.next.next;
        }
        return p1;
    }
}
